const { send: sendMainWindow } = require("../windows/main");
const {
  createControlWindow,
  send: sendControlWindow,
} = require("../windows/control");
const { ipcMain } = require("electron");
const signal = require("./websocket");

exports.handleIPC = () => {
  // 监听 login 事件
  ipcMain.handle("login", (event, arg) => {
    // 先mock要给六位数的随机code
    // return Math.floor(Math.random() * 900000) + 100000;
    return signal.invoke("login", null, "logined");
  });

  // 监听 control 事件
  ipcMain.on("control", (e, reomteCode) => {
    signal.send("control", { remote: reomteCode });
  });

  // 控制成功后，返回给主进程
  signal.on("controled", (data) => {
    // 接收到控制端，发送的被控制code
    // 参数三：1表示控制端，2表示被控制端
    // 主进程向 MainWindow 渲染进程发送 control-state-change 事件
    sendMainWindow("control-state-change", data.remote, 1);
    // 打开被控制端窗口
    createControlWindow();
  });

  // 被控制后
  signal.on("be-controlled", (data) => {
    // 是被 data.remote 控制
    sendMainWindow("control-state-change", data.remote, 2);
    // 打开被控制端窗口
    // createControlWindow();
  });

  // 注册一个 forward 事件用来转发信令
  ipcMain.on("forward", (e, event, data) => {
    signal.send("forward", { event, data });
  });
  signal.on("offer", (data) => {
    // 收到 offer ，转发给傀儡端
    sendMainWindow("offer", data);
  });
  signal.on("answer", (data) => {
    console.log("🚀 ~ ipcMain.js:50 ~ signal.on ~ data:", data);

    // 收到 answer ，转发给控制端
    sendControlWindow("answer", data);
  });
  signal.on("pupet-candidate", (data) => {
    // 收到傀儡端的 candidate ，转发给控制端
    sendControlWindow("candidate", data);
  });
  signal.on("control-candidate", (data) => {
    // 收到控制端的 candidate ，转发给傀儡端
    sendMainWindow("candidate", data);
  });

  // 从主进程 获取 desktopCapturer-getSources
  ipcMain.handle("desktopCapturer-getSources", () => {
    return require("electron").desktopCapturer.getSources({
      types: ["screen"],
    });
  });
};
